#include "db.hpp"
#include <iostream>
using namespace std;

// 数据库连接配置信息
static string server = "127.0.0.1";
static string user = "root";
static string password = "9542zgjZ@";
static string dbname = "chat";

/**
 * @brief 初始化数据库连接
 *
 */
MySQL::MySQL()
{
    _conn = mysql_init(nullptr);
}
/**
 * @brief  释放数据库链接资源
 *
 */
MySQL::~MySQL()
{
    if (_conn != nullptr)
        mysql_close(_conn);
}
/**
 * @brief 连接数据库
 *
 * @return true
 * @return false
 */
bool MySQL::connect()
{
    MYSQL *p = mysql_real_connect(_conn, server.c_str(), user.c_str(),
                                  password.c_str(), dbname.c_str(), 3306, nullptr, 0);
    if (p != nullptr)
    {
        // C和C++代码默认的编码字符是ASCII
        mysql_query(_conn, "set names gbk");
        return true;
    }
    else
    {
        LOG_INFO << "connect mysql fail!";
        return false;
    }
}
/**
 * @brief 数据库更新操作
 *
 * @param sql
 * @return true
 * @return false
 */
bool MySQL::update(string sql)
{
    if (mysql_query(_conn, sql.c_str()))
    {
        LOG_INFO << __FILE__ << ":" << __LINE__ << ":"
                 << sql << "更新失败!";
        cout << mysql_error(_conn) << endl;
        return false;
    }
    return true;
}
/**
 * @brief 服务器查询操作
 *
 * @param sql
 * @return MYSQL_RES*
 */
MYSQL_RES *MySQL::query(string sql)
{
    if (mysql_query(_conn, sql.c_str()))
    {
        LOG_INFO << __FILE__ << ":" << __LINE__ << ":"
                 << sql << "查询失败!";
        cout << mysql_error(_conn) << endl;
        return nullptr;
    }
    return mysql_use_result(_conn);
}
/**
 * @brief 获取数据库连接
 *
 * @return MYSQL*
 */
MYSQL *MySQL::getConnection()
{
    return _conn;
}
/**
 * @brief 刷新空闲时间戳
 *
 */
void MySQL::refreshAliveTime()
{
    _alivetime = clock();
}
/**
 * @brief 获取空闲时间
 *
 * @return clock_t
 */
clock_t MySQL::getAliveTime()
{
    return clock() - _alivetime;
}
